<!DOCTYPE html>
<html>
<head>
<title>模块</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
/* GitHub stylesheet for MarkdownPad (http://markdownpad.com) */
/* Author: Nicolas Hery - http://nicolashery.com */
/* Version: b13fe65ca28d2e568c6ed5d7f06581183df8f2ff */
/* Source: https://github.com/nicolahery/markdownpad-github */

/* RESET
=============================================================================*/

html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video {
  margin: 0;
  padding: 0;
  border: 0;
}

/* BODY
=============================================================================*/

body {
  font-family: Helvetica, arial, freesans, clean, sans-serif;
  font-size: 14px;
  line-height: 1.6;
  color: #333;
  background-color: #fff;
  padding: 20px;
  max-width: 960px;
  margin: 0 auto;
}

body>*:first-child {
  margin-top: 0 !important;
}

body>*:last-child {
  margin-bottom: 0 !important;
}

/* BLOCKS
=============================================================================*/

p, blockquote, ul, ol, dl, table, pre {
  margin: 15px 0;
}

/* HEADERS
=============================================================================*/

h1, h2, h3, h4, h5, h6 {
  margin: 20px 0 10px;
  padding: 0;
  font-weight: bold;
  -webkit-font-smoothing: antialiased;
}

h1 tt, h1 code, h2 tt, h2 code, h3 tt, h3 code, h4 tt, h4 code, h5 tt, h5 code, h6 tt, h6 code {
  font-size: inherit;
}

h1 {
  font-size: 28px;
  color: #000;
}

h2 {
  font-size: 24px;
  border-bottom: 1px solid #ccc;
  color: #000;
}

h3 {
  font-size: 18px;
}

h4 {
  font-size: 16px;
}

h5 {
  font-size: 14px;
}

h6 {
  color: #777;
  font-size: 14px;
}

body>h2:first-child, body>h1:first-child, body>h1:first-child+h2, body>h3:first-child, body>h4:first-child, body>h5:first-child, body>h6:first-child {
  margin-top: 0;
  padding-top: 0;
}

a:first-child h1, a:first-child h2, a:first-child h3, a:first-child h4, a:first-child h5, a:first-child h6 {
  margin-top: 0;
  padding-top: 0;
}

h1+p, h2+p, h3+p, h4+p, h5+p, h6+p {
  margin-top: 10px;
}

/* LINKS
=============================================================================*/

a {
  color: #4183C4;
  text-decoration: none;
}

a:hover {
  text-decoration: underline;
}

/* LISTS
=============================================================================*/

ul, ol {
  padding-left: 30px;
}

ul li > :first-child, 
ol li > :first-child, 
ul li ul:first-of-type, 
ol li ol:first-of-type, 
ul li ol:first-of-type, 
ol li ul:first-of-type {
  margin-top: 0px;
}

ul ul, ul ol, ol ol, ol ul {
  margin-bottom: 0;
}

dl {
  padding: 0;
}

dl dt {
  font-size: 14px;
  font-weight: bold;
  font-style: italic;
  padding: 0;
  margin: 15px 0 5px;
}

dl dt:first-child {
  padding: 0;
}

dl dt>:first-child {
  margin-top: 0px;
}

dl dt>:last-child {
  margin-bottom: 0px;
}

dl dd {
  margin: 0 0 15px;
  padding: 0 15px;
}

dl dd>:first-child {
  margin-top: 0px;
}

dl dd>:last-child {
  margin-bottom: 0px;
}

/* CODE
=============================================================================*/

pre, code, tt {
  font-size: 12px;
  font-family: Consolas, "Liberation Mono", Courier, monospace;
}

code, tt {
  margin: 0 0px;
  padding: 0px 0px;
  white-space: nowrap;
  border: 1px solid #eaeaea;
  background-color: #f8f8f8;
  border-radius: 3px;
}

pre>code {
  margin: 0;
  padding: 0;
  white-space: pre;
  border: none;
  background: transparent;
}

pre {
  background-color: #f8f8f8;
  border: 1px solid #ccc;
  font-size: 13px;
  line-height: 19px;
  overflow: auto;
  padding: 6px 10px;
  border-radius: 3px;
}

pre code, pre tt {
  background-color: transparent;
  border: none;
}

kbd {
    -moz-border-bottom-colors: none;
    -moz-border-left-colors: none;
    -moz-border-right-colors: none;
    -moz-border-top-colors: none;
    background-color: #DDDDDD;
    background-image: linear-gradient(#F1F1F1, #DDDDDD);
    background-repeat: repeat-x;
    border-color: #DDDDDD #CCCCCC #CCCCCC #DDDDDD;
    border-image: none;
    border-radius: 2px 2px 2px 2px;
    border-style: solid;
    border-width: 1px;
    font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
    line-height: 10px;
    padding: 1px 4px;
}

/* QUOTES
=============================================================================*/

blockquote {
  border-left: 4px solid #DDD;
  padding: 0 15px;
  color: #777;
}

blockquote>:first-child {
  margin-top: 0px;
}

blockquote>:last-child {
  margin-bottom: 0px;
}

/* HORIZONTAL RULES
=============================================================================*/

hr {
  clear: both;
  margin: 15px 0;
  height: 0px;
  overflow: hidden;
  border: none;
  background: transparent;
  border-bottom: 4px solid #ddd;
  padding: 0;
}

/* TABLES
=============================================================================*/

table th {
  font-weight: bold;
}

table th, table td {
  border: 1px solid #ccc;
  padding: 6px 13px;
}

table tr {
  border-top: 1px solid #ccc;
  background-color: #fff;
}

table tr:nth-child(2n) {
  background-color: #f8f8f8;
}

/* IMAGES
=============================================================================*/

img {
  max-width: 100%
}
</style>
<style type="text/css">
.highlight  { background: #ffffff; }
.highlight .c { color: #999988; font-style: italic } /* Comment */
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
.highlight .k { font-weight: bold } /* Keyword */
.highlight .o { font-weight: bold } /* Operator */
.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */
.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */
.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */
.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #aa0000 } /* Generic.Error */
.highlight .gh { color: #999999 } /* Generic.Heading */
.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #555555 } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #aaaaaa } /* Generic.Subheading */
.highlight .gt { color: #aa0000 } /* Generic.Traceback */
.highlight .kc { font-weight: bold } /* Keyword.Constant */
.highlight .kd { font-weight: bold } /* Keyword.Declaration */
.highlight .kp { font-weight: bold } /* Keyword.Pseudo */
.highlight .kr { font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */
.highlight .m { color: #009999 } /* Literal.Number */
.highlight .s { color: #d14 } /* Literal.String */
.highlight .na { color: #008080 } /* Name.Attribute */
.highlight .nb { color: #0086B3 } /* Name.Builtin */
.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */
.highlight .no { color: #008080 } /* Name.Constant */
.highlight .ni { color: #800080 } /* Name.Entity */
.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */
.highlight .nn { color: #555555 } /* Name.Namespace */
.highlight .nt { color: #000080 } /* Name.Tag */
.highlight .nv { color: #008080 } /* Name.Variable */
.highlight .ow { font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mf { color: #009999 } /* Literal.Number.Float */
.highlight .mh { color: #009999 } /* Literal.Number.Hex */
.highlight .mi { color: #009999 } /* Literal.Number.Integer */
.highlight .mo { color: #009999 } /* Literal.Number.Oct */
.highlight .sb { color: #d14 } /* Literal.String.Backtick */
.highlight .sc { color: #d14 } /* Literal.String.Char */
.highlight .sd { color: #d14 } /* Literal.String.Doc */
.highlight .s2 { color: #d14 } /* Literal.String.Double */
.highlight .se { color: #d14 } /* Literal.String.Escape */
.highlight .sh { color: #d14 } /* Literal.String.Heredoc */
.highlight .si { color: #d14 } /* Literal.String.Interpol */
.highlight .sx { color: #d14 } /* Literal.String.Other */
.highlight .sr { color: #009926 } /* Literal.String.Regex */
.highlight .s1 { color: #d14 } /* Literal.String.Single */
.highlight .ss { color: #990073 } /* Literal.String.Symbol */
.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */
.highlight .vc { color: #008080 } /* Name.Variable.Class */
.highlight .vg { color: #008080 } /* Name.Variable.Global */
.highlight .vi { color: #008080 } /* Name.Variable.Instance */
.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */
.pl-c {
    color: #969896;
}

.pl-c1,.pl-mdh,.pl-mm,.pl-mp,.pl-mr,.pl-s1 .pl-v,.pl-s3,.pl-sc,.pl-sv {
    color: #0086b3;
}

.pl-e,.pl-en {
    color: #795da3;
}

.pl-s1 .pl-s2,.pl-smi,.pl-smp,.pl-stj,.pl-vo,.pl-vpf {
    color: #333;
}

.pl-ent {
    color: #63a35c;
}

.pl-k,.pl-s,.pl-st {
    color: #a71d5d;
}

.pl-pds,.pl-s1,.pl-s1 .pl-pse .pl-s2,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre,.pl-src,.pl-v {
    color: #df5000;
}

.pl-id {
    color: #b52a1d;
}

.pl-ii {
    background-color: #b52a1d;
    color: #f8f8f8;
}

.pl-sr .pl-cce {
    color: #63a35c;
    font-weight: bold;
}

.pl-ml {
    color: #693a17;
}

.pl-mh,.pl-mh .pl-en,.pl-ms {
    color: #1d3e81;
    font-weight: bold;
}

.pl-mq {
    color: #008080;
}

.pl-mi {
    color: #333;
    font-style: italic;
}

.pl-mb {
    color: #333;
    font-weight: bold;
}

.pl-md,.pl-mdhf {
    background-color: #ffecec;
    color: #bd2c00;
}

.pl-mdht,.pl-mi1 {
    background-color: #eaffea;
    color: #55a532;
}

.pl-mdr {
    color: #795da3;
    font-weight: bold;
}

.pl-mo {
    color: #1d3e81;
}
.task-list {
padding-left:10px;
margin-bottom:0;
}

.task-list li {
    margin-left: 20px;
}

.task-list-item {
list-style-type:none;
padding-left:10px;
}

.task-list-item label {
font-weight:400;
}

.task-list-item.enabled label {
cursor:pointer;
}

.task-list-item+.task-list-item {
margin-top:3px;
}

.task-list-item-checkbox {
display:inline-block;
margin-left:-20px;
margin-right:3px;
vertical-align:1px;
}
</style>
<link href="https://cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.css" rel="stylesheet">
<link href="https://cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">



<script type="text/javascript">
  document.addEventListener("DOMContentLoaded", function() {

    // 生成目录列表
    var div1 = document.createElement("div");
    div1.style.cssText = "clear:both";
    var outline = document.createElement("div");
    outline.setAttribute("id", "outline-list");
    outline.style.cssText = "border:solid 1px #ccc; background:#eee; min-width:200px;padding:4px 10px;";

    var ele_p = document.createElement("p");
    ele_p.style.cssText = "text-align: left; margin: 0;";
    outline.appendChild(ele_p);

    var ele_span = document.createElement("span");
    // ele_span.style.cssText = "float: left;";
    var ele_text=document.createTextNode("目录");
    ele_span.appendChild(ele_text);

    var ele_a = document.createElement("a");
    ele_a.appendChild(document.createTextNode("[+]"));
    ele_a.setAttribute("href", "#");
    ele_a.setAttribute("onclick", "javascript:return openct(this);");
    ele_a.setAttribute("title", "点击打开目录");

    ele_span.appendChild(ele_a);
    ele_p.appendChild(ele_span);

    var ele_ol = document.createElement("ul");
    ele_ol.style.cssText = "list-style-type:none;display:none;margin-left:14px;padding-left:14px;line-height:160%;";
    ele_ol.setAttribute("id", "outline_ol");
    outline.appendChild(ele_ol);
    var div1 = document.createElement("div");
    div1.style.cssText = "clear:both";

    document.body.insertBefore(outline, document.body.childNodes[0]);
    // 获取所有标题
    var headers = document.querySelectorAll('h1,h2,h3,h4,h5,h6');
    if (headers.length < 2)
      return;

    // -----
    var old_h = 0, ol_cnt = 0;
    // -----

    for (var i = 0; i < headers.length; i++) {

      var ele_ols = null;
      var ele_Current = ele_ol;
      // 找出它是H几，为后面前置空格准备
      var header = headers[i];
      header.setAttribute("id", "t" + i + header.tagName);
      var h = parseInt(header.tagName.substr(1), 10);

      // -----
      if (!old_h){
        old_h = h;

      }

      if (h > old_h) {

        ele_ols = document.createElement("ul");
        ele_Current = ele_ol;
        if(ele_Current && ol_cnt > 0){
          var temp = ol_cnt;
          while(temp > 0){
            ele_Current = ele_Current.lastChild;
            temp--;
          }
        }
        ele_Current.lastChild.appendChild(ele_ols);
        ol_cnt++;
      } else if (h < old_h && ol_cnt > 0) {

        if (h == 1) {
          while (ol_cnt > 0) {
            ol_cnt--;
          }
        } else {
          ele_ols = document.createElement("ul");
          ele_Current = ele_ol;
          if(ele_Current && ol_cnt > 0){
            var temp = ol_cnt;
            while(temp > 1){
              ele_Current = ele_Current.lastChild;
              temp--;
            }
          }
        // var ele_Parent = ele_Current.parentNode();
        //ele_Current.appendChild(ele_ols);
        ol_cnt--;

        }
      } else if (h == old_h && ol_cnt > 0) {

        ele_Current = ele_ol;
        if(ele_Current && ol_cnt > 0){
          var temp = ol_cnt;
          while(temp > 0){
            ele_Current = ele_Current.lastChild;
            temp--;
          }
        }
        ele_Current = ele_Current.lastChild;
      }
      if (h == 1) {
        while (ol_cnt > 0) {
          ol_cnt--;
        }
      }
      if (h < old_h && ol_cnt > 0 && h != 1){
        ele_li = document.createElement("li")
        ele_Current.lastChild.appendChild(ele_li);
        old_h = h;
        var a = document.createElement("a");
        // 为目录项设置链接
        a.setAttribute("href", "#t" + i + header.tagName);
        // 目录项文本前面放置对应的空格
        a.innerHTML = header.textContent;
        ele_li.appendChild(a);
        continue;
      }

      old_h = h;
      // -----
      if (ele_ols){
        ele_li = document.createElement("li")
        ele_ols.appendChild(ele_li); 
      } else {
        ele_li = document.createElement("li")
        ele_Current.appendChild(ele_li);
      }
      var a = document.createElement("a");
      // 为目录项设置链接
      a.setAttribute("href", "#t" + i + header.tagName);
      // 目录项文本前面放置对应的空格
      a.innerHTML = header.textContent;
      ele_li.appendChild(a);
    }
    // -----
    while (ol_cnt > 0) {
      ol_cnt--;
    }
    // -----
    });
function openct(e) {
  if (e.innerHTML == '[+]') {
    // createTextNode
    e.setAttribute('title', '收起');
    e.innerHTML = '[-]';
    var element = document.getElementById("outline_ol");
    element.style.cssText = "margin-left:14px;padding-left:14px;line-height:160%;";
  } else {
    e.setAttribute('title', '展开');
    e.innerHTML = '[+]';
    var element = document.getElementById("outline_ol");
    element.style.cssText = "display:none;margin-left:14px;padding-left:14px;line-height:160%;";
  }
  e.blur();
  return false;
}
</script>
</head>
<body>
<h1 id="1-">1 引导页</h1>
<h1 id="-">响应码</h1>
<ul>
<li>000000 请求成功</li><li>999999 请求异常</li><li>403 权限不足，请求了不属于自身角色的资源，比如家长请求了家教的接口</li><li>401 未通过鉴权，需要鉴权的接口，token失效或者无token，提醒重新登录即可</li></ul>
<h1 id="2-">2 家长</h1>
<ul>
<li>注册</li><li>主页</li><li>下单</li><li>进行中的订单</li><li>历史订单</li><li>孩子维护</li><li>我的</li></ul>
<h2 id="2-1-">2.1 孩子维护</h2>
<h3 id="2-1-1-get">2.1.1 列表查询孩子 GET</h3>
<p>/parent/action/listStudent?pageSize=10&amp;pageNum=1&amp;parent_id=4</p>
<h3 id="2-1-2-post">2.1.2 家长添加孩子 POST</h3>
<p>/parent/action/addStudent</p>
<pre><code>//孩子实体类Student字段

private String id;
private String parent_id;//家长id

private String name;//名称

private String grade;//年级

private Integer age;//年龄

private Gender gender;//性别,男、女

private String note;//孩子情况简介
</code></pre><h3 id="2-1-3-post">2.1.3 更新孩子信息 POST</h3>
<p>/parent/action/updateStudent</p>
<blockquote>
<p>参数同上</p>
</blockquote>
<h3 id="2-1-4-get">2.1.4 孩子列表查询 GET</h3>
<p>/parent/action/listStudent?pageSize=10&amp;pageNum=1&amp;parent_id=34343</p>
<h3 id="2-1-5-get">2.1.5 查看孩子详细信息 GET</h3>
<p>/parent/action/studentDetails?student_id=4545</p>
<h2 id="2-2-">2.2 待定订单</h2>
<blockquote>
<p>成交前的订单</p>
</blockquote>
<p>订单状态比较多，返回到前端是中文，往后台传值可以是中文也可以是英文，后台有做兼容处理：</p>
<pre><code>    /*家长创建的订单初始状态*/
    EDITING(&quot;编辑中&quot;),

    /*提交系统管理员进行审核*/
    AUDITING(&quot;审核中&quot;),

    /*审核通过的订单*/
    PUBLISH(&quot;发布&quot;),

    /*审核不通过的订单*/
    REJECTED(&quot;审核不通过&quot;),

    /*报名的人数已达3人*/
    FULL(&quot;名额已满&quot;),

    /*家长已经初步选中一个报名者*/
    SELECTED(&quot;已选中&quot;),

    /*报名者收到通知，签定一个合同，交付服务费*/
    PAYED(&quot;已接单&quot;),

    /*双方线下交流未能达成一致，平台可以介入协调*/
    NODEAL(&quot;未成交&quot;),

    /*定时任务*/
    /*线下交流无碍，同意试讲，由家长更新为此状态，若干天后系统将“已接单”修改为“试讲”*/
    TRIAL(&quot;试讲&quot;),

    /*试讲不满意，家长、家教线下约定时间进行试讲，家长不满意教学效果*/
    UNSATISFACTORY(&quot;不满意&quot;),

    /*定时任务*/
    /*试讲满意，后续正常教学，由家长更新，若一定天内未更新，系统将“已接单”修改为“教学中”*/
    TEACHING(&quot;教学中&quot;),

    /*正常结束的订单，教学一个月后提醒家长进行操作、并评价*/
    FINISHED(&quot;已完成&quot;),

    /*试讲不满意
    或者
    线下交流不畅未成交
    退费申请审批驳回
    ，申请退款的订单，家教发起*/
    APPLY_REFUND(&quot;申请退费&quot;),

    /*
    * 退费理由不充足，驳回申请
    * 申请退费-&gt; 驳回退费申请
    * */
    REJECT_REFUND(&quot;驳回退费申请&quot;),

    /*
    * 同意退费，计算应退金额，发起退款流程
    * */
    AGREE_REFUND(&quot;退费中&quot;),


    /*
    * 退款流程结束，银行账户结清，退款完成的订单
    * */
    FINISHED_REFUNDED(&quot;已退费&quot;),

    /**
     * 自发布起3天内
     * 未能选中报名者的订单
     * 用户删除的订单
     */
    DISABLED(&quot;已失效&quot;);
</code></pre><h3 id="2-2-1-">2.2.1 订单列表-待定订单</h3>
<blockquote>
<p>制作中的订单，包括状态：新建(EDITING)、审核中(AUDITING)、已驳回(REJECTED)、发布(PUBLISH)、名额已满(FULL)、已选中(SELECTED) GET</p>
</blockquote>
<p>/parent/action/producingOrders?parent_id=121&amp;status=EDITING&amp;pageSize=10&amp;pageNum=1</p>
<h3 id="2-2-2-post">2.2.2 添加订单 POST</h3>
<p>/parent/action/addOrder<br>body中传参，订单字段如下</p>
<pre><code>    private String id;
    private String parent_name;//家长姓名

    private Gender parent_gender;//家长性别

    private String parent_phone;//家长联系方式

    private String subjects;//辅导科目

    private String learn_hours;//可以上课的空余时间，几点到几点

    private String learn_address;//上课地点，校区

    private String demand;//对家教的要求，json

    private String possessor;/家长id，订单拥有者-家长

    private String creator;//创建者-家长或者管理人员

    private String student_ids;//学生id，家长选择要上课的孩子，多个以逗号隔开
</code></pre><h3 id="2-2-3-post">2.2.3 更新订单 POST</h3>
<p>/parent/action/updateOrder<br>传参同上</p>
<h3 id="2-2-4-post">2.2.4 提交订单 POST</h3>
<p>/parent/action/commitOrder?order_id=123</p>
<h3 id="2-2-5-auditing-publish-post">2.2.5 撤回订单，只能撤回状态是“审核中(AUDITING)、发布(PUBLISH)”且无人报名的订单，撤回后能重新进行编辑 POST</h3>
<p>/parent/action/cancelOrder?order_id=2323</p>
<h3 id="2-2-6-post">2.2.6 家长删除订单，只能删除状态是“编辑中、审核中、发布、名额已满”,且通知已经报名的家教 POST</h3>
<p>/parent/action/deleteOrder?order_id=343</p>
<h3 id="2-2-7-get">2.2.7 查看报名者列表 GET</h3>
<p>/parent/action/listApplies?order_id=订单id</p>
<h3 id="2-2-8-get">2.2.8 查看报名者的简历 GET</h3>
<p>/parent/action/viewResume?resume_id=某报名者的简历id</p>
<h3 id="2-2-8-post">2.2.8 选中一个报名者 POST</h3>
<p>/parent/action/chooseApply</p>
<table>
<thead>
<tr>
<th>字段</th>
<th>名称</th>
<th>数据类型</th>
<th>是否必须</th>
</tr>
</thead>
<tbody>
<tr>
<td>order_id</td>
<td>订单id</td>
<td>string</td>
<td>是</td>
</tr>
<tr>
<td>parent_id</td>
<td>家长id</td>
<td>string</td>
<td>是</td>
</tr>
<tr>
<td>apply_id</td>
<td>申请id</td>
<td>string</td>
<td>是</td>
</tr>
<tr>
<td>tutor_id</td>
<td>家教id</td>
<td>string</td>
<td>否</td>
</tr>
</tbody>
</table>
<h3 id="2-2-9-post">2.2.9 服务取消，双方线下交流未果 POST</h3>
<p>/parent/action/noDeal</p>
<table>
<thead>
<tr>
<th>字段</th>
<th>名称</th>
<th>数据类型</th>
<th>是否必须</th>
</tr>
</thead>
<tbody>
<tr>
<td>order_id</td>
<td>订单id</td>
<td>string</td>
<td>是</td>
</tr>
<tr>
<td>comment</td>
<td>说明</td>
<td>string</td>
<td>是</td>
</tr>
</tbody>
</table>
<h3 id="2-2-10-post">2.2.10 家长不满意试讲效果，试讲失败 POST</h3>
<p>/parent/action/trialFail</p>
<table>
<thead>
<tr>
<th>字段</th>
<th>名称</th>
<th>数据类型</th>
<th>是否必须</th>
</tr>
</thead>
<tbody>
<tr>
<td>order_id</td>
<td>订单id</td>
<td>string</td>
<td>是</td>
</tr>
<tr>
<td>comment</td>
<td>说明</td>
<td>string</td>
<td>是</td>
</tr>
</tbody>
</table>
<h3 id="2-2-11-post">2.2.11 试讲成功，家长满意 POST</h3>
<p>/parent/action/trialSuccess</p>
<table>
<thead>
<tr>
<th>字段</th>
<th>名称</th>
<th>数据类型</th>
<th>是否必须</th>
</tr>
</thead>
<tbody>
<tr>
<td>order_id</td>
<td>订单id</td>
<td>string</td>
<td>是</td>
</tr>
<tr>
<td>parent_id</td>
<td>家长id</td>
<td>string</td>
<td>是</td>
</tr>
<tr>
<td>comment</td>
<td>说明</td>
<td>string</td>
<td>是</td>
</tr>
</tbody>
</table>
<h3 id="2-2-12-post">2.2.12 结束订单 POST</h3>
<p>/parent/action/finishOrder</p>
<table>
<thead>
<tr>
<th>字段</th>
<th>名称</th>
<th>数据类型</th>
<th>是否必须</th>
</tr>
</thead>
<tbody>
<tr>
<td>order_id</td>
<td>订单id</td>
<td>string</td>
<td>是</td>
</tr>
<tr>
<td>parent_id</td>
<td>家长id</td>
<td>string</td>
<td>是</td>
</tr>
<tr>
<td>comment</td>
<td>说明</td>
<td>string</td>
<td>是</td>
</tr>
</tbody>
</table>
<h2 id="2-3-">2.3 正在教学的订单</h2>
<blockquote>
<p>家长对试讲效果很满意，可更新订单状态为“教学中”，若不进行操作，若干时间后系统将自动更新状态</p>
</blockquote>
<h3 id="2-3-1-get">2.3.1 正在教学的订单列表 GET</h3>
<p>/parent/action/workingOrders?parent_id=121&amp;pageSize=10&amp;pageNum=1</p>
<h2 id="2-4-">2.4 历史订单</h2>
<h3 id="2-4-1-get">2.4.1 历史订单列表 GET</h3>
<p>/parent/action/historyOrders?parent_id=121&amp;pageSize=10&amp;pageNum=1</p>
<h2 id="2-5-">2.5 消息通知</h2>
<h3 id="2-5-1-get">2.5.1 家长消息列表 GET</h3>
<p>/parent/action/listMsg?receiver=家长id&amp;pageSize=10&amp;pageNum=1</p>
<h3 id="2-5-2-get">2.5.2 家长查看消息详情 GET</h3>
<p>/parent/action/detailsMsg?msg_id=消息id</p>
<h1 id="3-">3 家教</h1>
<h2 id="3-1-">3.1 注册</h2>
<h3 id="3-1-1-get">3.1.1 查看手机号是否已经注册 GET</h3>
<p>/anonymous/tutor/action/checkPhoneForParentSignIn?phone=555</p>
<h3 id="3-1-2-">3.1.2 查看用户名是否已经注册</h3>
<p>/anonymous/tutor/action/checkNameForParentSignIn?username=999</p>
<h3 id="3-1-3-get">3.1.3 获取注册用的图形验证码 GET</h3>
<p>/anonymous/tutor/action/checkCodeForSignIn</p>
<h3 id="3-1-4-get">3.1.4 获取注册用的短信验证码 GET</h3>
<p>/anonymous/tutor/action/phoneCodeForSignIn?phone=12121&amp;code=4545&amp;flag=77</p>
<h3 id="3-1-5-post">3.1.5 注册接口 POST</h3>
<p>/anonymous/tutor/action/signIn<br>实体类 Tutor</p>
<table>
<thead>
<tr>
<th>字段</th>
<th>名称</th>
<th>数据类型</th>
<th>是否必须</th>
<th>参考值</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>姓名</td>
<td>string</td>
<td>是</td>
</tr>
<tr>
<td>password</td>
<td>密码</td>
<td>string</td>
<td>是</td>
</tr>
<tr>
<td>phone</td>
<td>电话</td>
<td>string</td>
<td>是</td>
</tr>
<tr>
<td>wx_open_id</td>
<td>微信用户应用id</td>
<td>string</td>
<td>否</td>
</tr>
<tr>
<td>wx_union_id</td>
<td>微信用户id</td>
<td>string</td>
<td>否</td>
</tr>
<tr>
<td>gender</td>
<td>性别</td>
<td>string</td>
<td>是</td>
<td>男、女</td>
</tr>
</tbody>
</table>
<h3 id="3-1-6-post">3.1.6 登录 POST</h3>
<p>/wx/checkUser?code=..</p>
<h4 id="-">大体流程如下：</h4>
<ol>
<li>通过微信授权（静默方式）获取code</li><li>将code传给后台接口，后台调用授权接口，<br>取得用户openid</li><li>拿openid到数据中找用户，如已经注册的则进行登录，返回登录信息及token（token依然放在响应头中），<br>未注册的则无token，并返回注册提示</li><li>正常情况下，无论注册与否，返回的状态码都是成功的000000</li></ol>
<h2 id="3-2-">3.2 测评</h2>
<p><strong>简要说明</strong></p>
<blockquote>
<ul>
<li>每个家教都必须通过测评，目的是帮助他们熟悉平台</li><li>失败即锁定测评答题功能，等待后15分钟答题解锁，才能重新尝试，3次失败2天后方能重新尝试，如此直至用户通过测评</li><li>锁定：处于锁定状态的答题功能，保存与交卷功能会返回999999错误，及相应的错误提示</li><li>家教用户注册完成之后可以进入测评模块，在线上阅读相关资料，<br>称作学习</li><li>学习功能可以多次打开，不做限制</li><li>用户自觉学习完成，可以进入答题功能</li><li>若干道选择题，4个选项，可以随时保存进度，无校验、限制</li><li>题目全部答完，可以交卷，后台进行阅卷并返回结果，100%正确才算通过测评</li></ul>
</blockquote>
<h3 id="3-2-1-get">3.2.1 查询测评题目 GET</h3>
<p>/tutor/action/queryTest?id=家教id</p>
<h3 id="3-2-2-post">3.2.2 保存测评进度 POST</h3>
<p>/tutor/action/saveTest</p>
<p>参数： Question数组</p>
<p>Question实体类：</p>
<ul>
<li><p>String id;//主键</p>
</li><li><p>String tutor_id;//家教id</p>
</li><li><p>String content;//题目正文（展示用）</p>
</li><li><p>String right_answers;//正确答案 A/B/C/D（不用关心）</p>
</li><li><p>String constraint_terms;//待选项，json结构 [{&quot;A&quot;:&quot;...&quot;, &quot;B&quot;: &quot;...&quot;, &quot;C&quot;: &quot;...&quot;, &quot;D&quot;: &quot;...&quot;}]</p>
</li><li><p>String checked_answers;//选中项，保存用户答案的字段</p>
</li></ul>
<h3 id="3-2-3-psot">3.2.3 交卷，提交测评 PSOT</h3>
<p>/tutor/action/commitTest</p>
<p>参数：同保存接口一样</p>
<h2 id="3-3-">3.3 家教的简历维护</h2>
<h3 id="3-3-1-get">3.3.1 家教查看简历列表 GET</h3>
<p>/tutor/action/listResume?tutor_id=121&amp;pageSize=10&amp;pageNum=1</p>
<h3 id="3-3-2-post">3.3.2 家教创建简历 POST</h3>
<p>/tutor/action/addResume<br>body传参，字段详情参考,文科 </p>
<pre><code>private int tutor_id;//家教id

private String school;//学校
private String college;//学院
private String code;//学号
private String email;//邮箱
private String pict;//学生证信息页照片

private String profession;//专业
private String grade;//年级
private String high_school_province;//中考省份

private String high_score_ranking;//高考成绩排名

/*中考单科成绩*/
private String high_language;//中考-语文
private String high_math;//中考-数学
private String high_english;//中考-英语
private String high_physics;//中考-物理
private String high_chemie;//中考-化学
private String high_politics;//中考-政治
private String high_history;//中考-历史
private String high_geography;//中考-地理
private String high_biology;//中考-生物

private String college_school_province;//高考省份

private String college_score_ranking;//高考成绩排名

/*高考单科成绩*/
private String college_language;//高考-语文
private String college_math;//高考-数学
private String college_english;//高考-英语

private ProfessionalBranch class_type;//下拉选择，文科、理科

/*start-----理科------*/
private String college_physics;//高考-物理
private String college_chemie;//高考-化学
private String college_biology;//高考-生物
/*end-----理科------*/

/*start-----文科-----*/
private String college_politics;//高考-政治
private String college_history;//高考-历史
private String college_geography;//高考-地理
/*start-----文科-----*/


private String skilled_subjects;//擅长的科目

private String skilled_grades;//擅长的年级

private String experience;//家教经验

private String prize;//获奖情况

private String teaching_idea;//教学理念

private String self_evaluation;//自我评价``
</code></pre><p>``</p>
<h3 id="3-3-3-post">3.3.3 家教更新简历 POST</h3>
<p>/tutor/action/updateResume<br>传参基本和3.3.2一样，不过id是必传的</p>
<h3 id="3-3-4-get">3.3.4 家教查看简历详情 GET</h3>
<p>/tutor/action/detailsResume?id=简历id</p>
<h3 id="3-3-5-">3.3.5 家教删除简历</h3>
<p>/tutor/action/deleteResume?id=简历id</p>
<h2 id="3-4-">3.4 报名竞聘订单</h2>
<h3 id="3-4-1-get">3.4.1 家教查看已经发布的订单 GET</h3>
<p>/tutor/action/publishedOrders</p>
<table>
<thead>
<tr>
<th>字段</th>
<th>名称</th>
<th>数据类型</th>
<th>是否必须</th>
</tr>
</thead>
<tbody>
<tr>
<td>subjects</td>
<td>科目</td>
<td>string</td>
<td>否</td>
</tr>
<tr>
<td>demand</td>
<td>要求</td>
<td>string</td>
<td>否</td>
</tr>
<tr>
<td>learn_address</td>
<td>上课地址</td>
<td>string</td>
<td>否</td>
</tr>
<tr>
<td>pageSize</td>
<td>每页数据量</td>
<td>string</td>
<td>是</td>
</tr>
<tr>
<td>pageNum</td>
<td>当前第几页</td>
<td>string</td>
<td>是</td>
</tr>
</tbody>
</table>
<h3 id="3-4-2-get">3.4.2 家教查看一个订单的详情 GET</h3>
<p>/tutor/action/orderDetails?order_id=订单id</p>
<h3 id="3-4-3-post">3.4.3 家教报名一个订单 POST</h3>
<p>/tutor/action/addApply?tutor_id=家教id&amp;resume_id=简历id&amp;order_id=订单id</p>
<h2 id="3-5-">3.5 待定订单</h2>
<h3 id="3-5-1-get">3.5.1 待定订单列表 GET</h3>
<p>/tutor/action/producingApplies?tutor_id=家教id</p>
<h3 id="3-5-2-post">3.5.2 家教取消报名 POST</h3>
<p>/tutor/action/cancelApply?apply_id=申请id&amp;note=取消说明</p>
<h3 id="3-5-3-post">3.5.3 签订一个订单，被家长选中后，家教支付中介费 POST</h3>
<blockquote>
<p>将返回微信支付的一些参数，并唤起微信支付功能；<br>out_trade_no：商户支付订单编号</p>
</blockquote>
<p>/tutor/action/payApply?apply_id=申请id&amp;tutor_id=家教id</p>
<h3 id="3-5-3-get">3.5.3 支付结果查询 GET</h3>
<blockquote>
<p>查询支付结果</p>
</blockquote>
<p>/tutor/action/queryApplyPay?out_trade_no=商户订单编号</p>
<h2 id="3-6-">3.6 退款处理</h2>
<blockquote>
<p>一些失效的交易，可以发起退费申请，由平台审核，审核通过的将发起微信退款流程。视情况决定退款比率，如果支付时间过去太久，微信平台不支持退款，会退款失败</p>
</blockquote>
<h3 id="3-6-1-post">3.6.1 添加退款申请 POST</h3>
<p>/tutor/action/refund?apply_id=申请id&amp;comment=说明</p>
<h3 id="3-6-2-get">3.6.2 列表查看退款申请 GET</h3>
<p>/tutor/action/listRefund?tutor_id=家教ID</p>
<h3 id="3-6-3-get">3.6.3 退款详情 GET</h3>
<p>/tutor/action/detailsRefund?apply_id=申请id</p>
<h2 id="3-7-">3.7 正在教学</h2>
<h3 id="3-7-1-get">3.7.1 正在教学列表 GET</h3>
<p>/tutor/action/workingOrders?tutor_id=家教id</p>
<h3 id="3-7-2-get">3.7.2 查看正在教学详情 GET</h3>
<p>/tutor/action/detailsWorkingOrder?order_id=订单id</p>
<h2 id="3-8-">3.8 历史订单</h2>
<h3 id="3-8-1-get">3.8.1 历史订单列表 GET</h3>
<p>/tutor/action/historyOrders?tutor_id=家教id&amp;status=状态&amp;pageSize=10&amp;pageNum=1</p>
<h3 id="3-8-2-get">3.8.2 历史订单详情 GET</h3>
<p>/tutor/action/detailsHistoryOrder?order_id=订单id</p>
<h3 id="3-9-">3.9 家教消息</h3>
<h3 id="3-9-1-get">3.9.1 家教消息列表 GET</h3>
<p>/tutor/action/listMsg?receiver=家长id&amp;pageSize=10&amp;pageNum=1</p>
<h3 id="3-9-2-get">3.9.2 家教查看消息详情 GET</h3>
<p>/tutor/action/detailsMsg?msg_id=消息id</p>
<h2 id="4-">4 平台管理者</h2>
<ul>
<li>单查询</li><li>审批</li><li>退款</li><li>家长信息维护</li><li>家教信息维护</li><li>消息</li><li>数据报表</li></ul>

</body>
</html>
<!-- This document was created with MarkdownPad, the Markdown editor for Windows (http://markdownpad.com) -->
